/**
 * * 题目名称：用队列实现栈
 * * 题目地址：https://leetcode-cn.com/problems/implement-stack-using-queues
 */

// * 思路：利用两个队列，当一个队列的长度大于1时，将剩下的入队操作都入队到另外一个队列，出栈操作则将长度为1的队列中的元素进行出队。

/*
题目：
请你仅使用两个队列实现一个后入先出（LIFO）的栈，并支持普通队列的全部四种操作（push、top、pop 和 empty）。
实现 MyStack 类：
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的，返回 true ；否则，返回 false 。

注意：
你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
你所使用的语言也许不支持队列。 你可以使用 list （列表）或者 deque（双端队列）来模拟一个队列 , 只要是标准的队列操作即可。
*/

/**
 * Initialize your data structure here.
 */
 var MyStack = function() {
    this.queueA = [];
    this.queueB = [];
};

/**
 * Push element x onto stack. 
 * @param {number} x
 * @return {void}
 */
MyStack.prototype.push = function(x) {
    this.queueA.push(x);
};

/**
 * Removes the element on top of the stack and returns that element.
 * @return {number}
 */
MyStack.prototype.pop = function() {
    if(this.queueA.length>=1){
        while(this.queueA.length>1){
        this.queueB.push(this.queueA.shift());
        }
        return this.queueA.shift();
    }else if(this.queueA.length==0&&this.queueB.length!==0){
        this.queueA = this.queueB;
        this.queueB = [];
        return this.pop();
    }else 
        return -1;
};

/**
 * Get the top element.
 * @return {number}
 */
MyStack.prototype.top = function() {
    if(this.queueA.length>=1){
        while(this.queueA.length>1){
        this.queueB.push(this.queueA.shift());
        }
        return this.queueA[0];
    }else if(this.queueA.length==0&&this.queueB.length!==0){
        this.queueA = this.queueB;
        this.queueB = [];
        return this.top();
    }else 
        return -1;
};

/**
 * Returns whether the stack is empty.
 * @return {boolean}
 */
MyStack.prototype.empty = function() {
    return !this.queueA.length&&!this.queueB.length;
};

/**
 * Your MyStack object will be instantiated and called as such:
 * var obj = new MyStack()
 * obj.push(x)
 * var param_2 = obj.pop()
 * var param_3 = obj.top()
 * var param_4 = obj.empty()
 */

// 测试用例
let test = ''

var obj = new MyStack();
obj.push(1);
obj.push(2);
console.log(obj.top());
console.log(obj.pop());
console.log(obj.pop());
console.time('执行用时');
console.log(obj);
console.log(obj.empty());
console.timeEnd('执行用时');